#!/bin/bash

function dnp_GetPrintsRemaining ()
{
# send the get prints remaining command and read a reply
#echo "Checking Printer Supply Levels..." >&2
    local queue=$1
    local -i maxWait=15
    jobID=$(echo -e '#CUPS-COMMAND\nReportLevels\n'|lp -t "Checking Printer Supply Levels..."  -d ${queue} -- - |awk '{print $4}')
    i=0
    until test -z "$(lpstat|grep "${jobID}")" || ((i++ > maxWait))
    do sleep 1
    done
    ((i > maxWait)) && cancel "${jobID}"
}


#lowinktool

infoForMediaType ()
{
    case ${1} in 
    DS4000200|0200|200|DS4000201)
      mediaMax=400
      mediaName="DS40 5x3.5"
      ((media -= 50))
      ;;
    DS4000210|0210|210|DS4000211)
      mediaMax=200
      mediaName="DS40 5x7"
      ((media -= 50))
      ;;
    DS-RX100301|DS-RX100300)
      mediaMax=700
      mediaName="RX1 6x4"
      ((media -= 50))
      ;;
    DS4000300|0300|300|DS4000301)
      mediaMax=400
      mediaName="DS40 6x4"
      ((media -= 50))
      ;;
    DS-RX100210|DS-RX100211)
      mediaMax=400
      mediaName="RX1 5x7"
      ((media -= 50))
    ;;
    DS-RX100310|DS-RX100311)
      mediaMax=350
      mediaName="RX1 6x8"
      ((media -= 50))
      ;;
    DS4000310|0310|310|DS4000311)
      mediaMax=200
      mediaName="DS40 6x8"
      ((media -= 50))
      ;;
    DS4000400|0400|400|DS4000401)
      mediaMax=180
      mediaName="DS40 6x9"
      ((media -= 50))
      ;;
    DS8000500|0500|500|DS8000501)
      mediaMax=130
      mediaName="DS80 8x10"
      ((media -= 50))
      ;;
    DS8000510|0510|510|DS8000511)
      mediaMax=110
      mediaName="DS80 8x12"
      ((media -= 50))
      ;;
    DP-DS80D00500|0500|500|DP-DS80D00501)
      mediaMax=130
      mediaName="DS80D 8x10"
      ((media -= 50))
      ;;
    DP-DS80D00510|0500|500|DP-DS80D00511)
      mediaMax=110
      mediaName="DS80D 8x12"
      ((media -= 50))
      ;;
    default|*)
      mediaMax=0
      mediaName="Unknown"
      ;;
  esac
  ((0 > media)) && media=0
}
#echo -e '#CUPS-COMMAND\nReportLevels'|lp -d ${1} -- - >/dev/null
PPD="/etc/cups/ppd/${1}.ppd"
thisDate=$(date "+%s")
if test -r "${PPD}";then

#  dnp_GetPrintsRemaining $1
  media=$(awk '/^[*]MediaRemaining:/ {if (1< $NF) print $NF;else print "-1";exit}' "${PPD}")
  if ((-1 == ${media:=-1}));then
    dnp_GetPrintsRemaining $1
  fi
  media=$(awk '/^[*]MediaRemaining:/ {if (1< $NF) print $NF;else print "0";exit}' "${PPD}")
  media=${media//\"}
  model=$(awk '/^[*]Product:/ {print $NF;exit}' "${PPD}")
  model=${model//\"}
  model=${model//\)}
  model=${model//\(}
  mediaType=$(awk '/^[*]PrinterInstalledMedia:/ {if (1< $NF) print $NF;else print "00000";exit}' "${PPD}")
fi

infoForMediaType ${model// }${mediaType//\"}
mediaName="${mediaName} Ribbon (${media} of ${mediaMax})"

lastChangeTime=$(date -jf "%b %d %T %Y" "$(ls -lT ${PPD}|awk '{print $6,$7,$8,$9}')" "+%s")

echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                              "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>marker-change-time</key>
	<integer>'"${lastChangeTime}"'</integer>
	<key>printer-state-reasons</key>
	<array>
		<string>none</string>
	</array>
	<key>prtMarkerSuppliesOptionalVendorInfo</key>
	<string>144</string>
        <key>prtMarkerSuppliesTable</key>
        <array>
                <dict>
                        <key>prtMarkerSuppliesClass</key>
                        <integer>3</integer>
                        <key>prtMarkerSuppliesDescription</key>
                        <string>'"${mediaName}"'</string>
                        <key>prtMarkerSuppliesLevel</key>
                        <integer>'"${media//\"}"'</integer>
                        <key>prtMarkerSuppliesMaxCapacity</key>
                        <integer>'"${mediaMax//\"}"'</integer>
                        <key>prtMarkerSuppliesSupplyUnit</key>
                        <integer>2</integer>
                        <key>prtMarkerSRGBRepresentation</key>
                        <array>
                               	<real>0.5</real>
                               	<real>0.25</real>
                               	<real>0.0</real>
                        </array>
                        <key>prtMarkerSuppliesType</key>
                        <integer>7</integer>
                </dict>
        </array>
</dict>
</plist>'
